<?php
	class Modele {
		private $unPDO ; 
		public function __construct (){
			try{
			$this->unPDO = new PDO (
				"mysql:host=localhost;dbname=VirginieExotique", 
				"root", "") ;
			}
			catch (PDOException $exp)
			{
				echo "Erreur connexion :".$exp->getMessage (); 
			}
		}

		/************ Gestion des utilisateurs **************/

		public function selectAllUtilisateurs (){
			$requete ="select * from user_ve;" ;
			$select = $this->unPDO->prepare ($requete); 
			$select->execute (); 
			return $select->fetchAll();  
		}

		public function searchAllUtilisateurs ($nom_user, $prenom_user, $datenaissance_user, $sexe_user, $numtel_user, $pseudo_user, $email_user, $statut_user){//public function searchAllUtilisateurs ($filtres){
			$requete = "SELECT * FROM user_ve WHERE 1=1 ";
			$donnees = array();
		
			if (!empty($nom_user)) {
				$requete .= " AND nom_user LIKE :nom_user ";
				$donnees[':nom_user'] = '%' . $nom_user . '%';
			}
		
			if (!empty($prenom_user)) {
				$requete .= " AND prenom_user LIKE :prenom_user ";
				$donnees[':prenom_user'] = '%' . $prenom_user . '%';
			}
		
			if (!empty($pseudo_user)) {
				$requete .= " AND pseudo_user LIKE :pseudo_user ";
				$donnees[':pseudo_user'] = '%' . $pseudo_user . '%';
			}
		
			if (!empty($email_user)) {
				$requete .= " AND email_user LIKE :email_user ";
				$donnees[':email_user'] = '%' . $email_user . '%';
			}
		
			if (!empty($datenaissance_user)) {
				$requete .= " AND datenaissance_user = :datenaissance_user ";
				$donnees[':datenaissance_user'] = $datenaissance_user;
			}
		
			if (!empty($sexe_user)) {
				$requete .= " AND sexe_user = :sexe_user ";
				$donnees[':sexe_user'] = '%' . $sexe_user . '%';
			}
		
			if (!empty($numtel_user)) {
				$requete .= " AND numtel_user LIKE :numtel_user ";
				$donnees[':numtel_user'] = '%' . $numtel_user . '%';
			}

			if (!empty($statut_user)) {
				$requete .= " AND statut_user LIKE :statut_user ";
				$donnees[':statut_user'] = '%' . $statut_user . '%';
			}
		
			$select = $this->unPDO->prepare($requete);
			$select->execute($donnees);
			return $select->fetchAll();
		}
		

		/************ Gestion des categorie **************/
		public function selectAllCategories (){
			$requete ="select * from categorie ; " ;
			$select = $this->unPDO->prepare ($requete); 
			$select->execute (); 
			return $select->fetchAll();  
		}
		public function insertCategorie ($tab){
			if(isset($_FILES['img_categorie'])) {
                if(!empty($tab['nom_categorie'])) {
                    if(!empty($tab['desc_categorie'])) {
                        if(!empty($tab['ref_categorie'])) {
                            //if(!empty($tab['MDP'])) {
                                //if(!empty($tab['MDP2'])) {
                                    //if(($tab['MDP'])===($tab['MDP2'])) {
                                        $img_categorie = $_FILES['img_categorie']['name']; // Nom de l'image téléchargée
                                        $img_tmp_path = $_FILES['img_categorie']['tmp_name']; // Chemin temporaire de l'image téléchargée
                                        $img_destination = "img pr/img_sql/categorie/" . $img_categorie; // Chemin de destination où l'image sera sauvegardée
                                        
                                        // Déplacer l'image téléchargée vers le dossier de destination
                                        if(move_uploaded_file($img_tmp_path, $img_destination)) {
                                            // Requête d'insertion avec des paramètres nommés
                                            $requete = "INSERT INTO categorie (img_categorie, nom_categorie, desc_categorie, ref_categorie) VALUES (:img_categorie, :nom_categorie, :desc_categorie, :ref_categorie)";
                                            // Données à insérer dans la base de données
                                            $donnees = array(
                                                ":img_categorie" => $img_destination,
                                                ":nom_categorie" => $tab['nom_categorie'],
                                                ":desc_categorie" => $tab['desc_categorie'],
                                                ":ref_categorie" => $tab['ref_categorie']
                                            );
                                            // Préparation de la requête
                                            $select = $this->unPDO->prepare($requete);
                                            // Exécution de la requête avec les données fournies
                                            if($select->execute($donnees)) {
                                                echo "Candidat inséré avec succès.";
                                            } else {
                                                echo "Erreur lors de l'insertion du candidat.";
                                            }
                                        } else {echo "Erreur lors du téléchargement de l'image.";}
                                    //} else { echo "Les 2 champ MDP doit etre identique.";}
                                //} else { echo "Veuillez retapez le MDP SVP.";}
                            //} else { echo "Le champ MDP est vide ou non défini.";}
                        } else { echo "Le champ EMAIL est vide ou non défini.";}
                    } else { echo "Le champ PRENOM est vide ou non défini.";}
                } else {echo "Le champ NOM est vide ou non défini.";}
            } else {echo "Le champ PHOTO est vide ou non défini.";}

		}
		public function deleteCategorie ($idcategorie){
			$requete ="delete from categorie where idcategorie = :idcategorie ; " ;
			$donnees =array(":idcategorie"=>$idcategorie);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}
		/*public function updateCategorie ($tab){
			$requete="update categorie set nom_categorie = :nom_categorie, img_categorie=:img_categorie, desc_categorie=:desc_categorie, ref_categorie=:ref_categorie where idcategorie=:idcategorie ;"; 
			$donnees=array(
				":nom_categorie"=>$tab['nom_categorie'], 
				":img_categorie"=>$tab['img_categorie'], 
				":desc_categorie"=>$tab['desc_categorie'], 
				":ref_categorie"=>$tab['ref_categorie']
				":idcategorie"=>$tab['idcategorie']
			);

			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}*/

		public function searchAllCategories ($nom_categorie, $desc_categorie, $ref_categorie){//public function searchAllUtilisateurs ($filtres){
			$requete = "SELECT * FROM categorie WHERE 1=1 ";
			$donnees = array();
		
			if (!empty($nom_categorie)) {
				$requete .= " AND nom_categorie LIKE :nom_categorie ";
				$donnees[':nom_categorie'] = '%' . $nom_categorie . '%';
			}
		
			if (!empty($desc_categorie)) {
				$requete .= " AND desc_categorie LIKE :desc_categorie ";
				$donnees[':desc_categorie'] = '%' . $desc_categorie . '%';
			}
		
			if (!empty($ref_categorie)) {
				$requete .= " AND ref_categorie LIKE :ref_categorie ";
				$donnees[':ref_categorie'] = '%' . $ref_categorie . '%';
			}
		
			/*if (!empty($email_user)) {
				$requete .= " AND email_user LIKE :email_user ";
				$donnees[':email_user'] = '%' . $email_user . '%';
			}
		
			if (!empty($datenaissance_user)) {
				$requete .= " AND datenaissance_user = :datenaissance_user ";
				$donnees[':datenaissance_user'] = $datenaissance_user;
			}
		
			if (!empty($sexe_user)) {
				$requete .= " AND sexe_user = :sexe_user ";
				$donnees[':sexe_user'] = '%' . $sexe_user . '%';
			}
		
			if (!empty($numtel_user)) {
				$requete .= " AND numtel_user LIKE :numtel_user ";
				$donnees[':numtel_user'] = '%' . $numtel_user . '%';
			}

			if (!empty($statut_user)) {
				$requete .= " AND statut_user LIKE :statut_user ";
				$donnees[':statut_user'] = '%' . $statut_user . '%';
			}*/
		
			$select = $this->unPDO->prepare($requete);
			$select->execute($donnees);
			return $select->fetchAll();
		}


		/************ Gestion des produits **************/
		public function selectAllProduits (){
			$requete ="select * from produit ; " ;
			$select = $this->unPDO->prepare ($requete); 
			$select->execute (); 
			return $select->fetchAll();  
		}
		public function insertProduit($tab)
{
    if (isset($_FILES['img_produit'])) {
        if (!empty($tab['nom_produit'])) {
            if (!empty($tab['desc_produit'])) {
                if (!empty($tab['ref_produit'])) {
                    if (!empty($tab['prix_produit'])) {
                        // Nom de l'image téléchargée
                        $img_produit = $_FILES['img_produit']['name'];
                        // Chemin temporaire de l'image téléchargée
                        $img_tmp_path = $_FILES['img_produit']['tmp_name'];
                        // Chemin de destination où l'image sera sauvegardée
                        $img_destination = "img pr/img_sql/produit/" . $img_produit;

                        // Déplacer l'image téléchargée vers le dossier de destination
                        if (move_uploaded_file($img_tmp_path, $img_destination)) {
                            // Requête d'insertion avec des paramètres nommés
                            $requete = "INSERT INTO produit (img_produit, nom_produit, desc_produit, ref_produit, prix_produit) 
                                        VALUES (:img_produit, :nom_produit, :desc_produit, :ref_produit, :prix_produit)";
                            // Données à insérer dans la base de données
                            $donnees = array(
                                ":img_produit" => $img_destination,
                                ":nom_produit" => $tab['nom_produit'],
                                ":desc_produit" => $tab['desc_produit'],
                                ":ref_produit" => $tab['ref_produit'],
                                ":prix_produit" => $tab['prix_produit'],
                            );
                            // Préparation de la requête
                            $select = $this->unPDO->prepare($requete);
                            // Exécution de la requête avec les données fournies
                            if ($select->execute($donnees)) {
                                echo "Produit inséré avec succès.";
                            } else {
                                echo "Erreur lors de l'insertion du produit.";
                            }
                        } else {
                            echo "Erreur lors du téléchargement de l'image.";
                        }
                    } else {
                        echo "Le champ Prix du Produit est vide ou non défini.";
                    }
                } else {
                    echo "Le champ Référence du Produit est vide ou non défini.";
                }
            } else {
                echo "Le champ Description du Produit est vide ou non défini.";
            }
        } else {
            echo "Le champ Nom du Produit est vide ou non défini.";
        }
    } else {
        echo "Le champ Image du Produit est vide ou non défini.";
    }
}

public function searchAllProduits($nom_produit, $desc_produit, $ref_produit, $prix_produit){//public function searchAllUtilisateurs ($filtres){
	$requete = "SELECT * FROM produit WHERE 1=1 ";
	$donnees = array();

	if (!empty($nom_produit)) {
		$requete .= " AND nom_produit LIKE :nom_produit ";
		$donnees[':nom_produit'] = '%' . $nom_produit . '%';
	}

	if (!empty($desc_produit)) {
		$requete .= " AND desc_produit LIKE :desc_produit ";
		$donnees[':desc_produit'] = '%' . $desc_produit . '%';
	}

	if (!empty($ref_produit)) {
		$requete .= " AND ref_produit LIKE :ref_produit ";
		$donnees[':ref_produit'] = '%' . $ref_produit . '%';
	}

	if (!empty($prix_produit)) {
		$requete .= " AND prix_produit LIKE :prix_produit ";
		$donnees[':prix_produit'] = '%' . $prix_produit . '%';
	}

	/*if (!empty($datenaissance_user)) {
		$requete .= " AND datenaissance_user = :datenaissance_user ";
		$donnees[':datenaissance_user'] = $datenaissance_user;
	}

	if (!empty($sexe_user)) {
		$requete .= " AND sexe_user = :sexe_user ";
		$donnees[':sexe_user'] = '%' . $sexe_user . '%';
	}

	if (!empty($numtel_user)) {
		$requete .= " AND numtel_user LIKE :numtel_user ";
		$donnees[':numtel_user'] = '%' . $numtel_user . '%';
	}

	if (!empty($statut_user)) {
		$requete .= " AND statut_user LIKE :statut_user ";
		$donnees[':statut_user'] = '%' . $statut_user . '%';
	}*/

	$select = $this->unPDO->prepare($requete);
	$select->execute($donnees);
	return $select->fetchAll();
}
		/*public function deleteCategorie ($idcategorie){
			$requete ="delete from categorie where idcategorie = :idcategorie ; " ;
			$donnees =array(":idcategorie"=>$idcategorie);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}*/
		/*public function updateCategorie ($tab){
			$requete="update categorie set nom_categorie = :nom_categorie, img_categorie=:img_categorie, desc_categorie=:desc_categorie, ref_categorie=:ref_categorie where idcategorie=:idcategorie ;"; 
			$donnees=array(
				":nom_categorie"=>$tab['nom_categorie'], 
				":img_categorie"=>$tab['img_categorie'], 
				":desc_categorie"=>$tab['desc_categorie'], 
				":ref_categorie"=>$tab['ref_categorie']
				":idcategorie"=>$tab['idcategorie']
			);

			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}*/


		/************ Gestion des classes **************/
		public function selectAllClasses (){
			$requete ="select * from classe ; " ;
			$select = $this->unPDO->prepare ($requete); 
			$select->execute (); 
			return $select->fetchAll();  
		}
		public function searchAllClasses ($filtre){
			$requete ="select * from classe 
					where nom like :filtre or salle like :filtre or diplome like :filtre ; " ;
			$donnees=array(":filtre"=> "%".$filtre."%");
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
			return $select->fetchAll();  
		}
		public function insertClasse ($tab){
			$requete ="insert into classe values (null, :nom, :salle, :diplome);" ;
			$donnees =array(	":nom"=>$tab['nom'], 
								":salle"=>$tab['salle'], 
								":diplome"=>$tab['diplome']);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}
		public function deleteClasse ($idclasse){
			$requete ="delete from classe where idclasse = :idclasse ; " ;
			$donnees =array(":idclasse"=>$idclasse);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}
		public function selectWhereClasse ($idclasse)
		{
			$requete ="select * from classe where idclasse=:idclasse;" ; 
			$donnees =array(":idclasse"=>$idclasse);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
			$uneClasse = $select->fetch (); 
			return $uneClasse; 
		}
		public function updateClasse ($tab){
			$requete="update classe set nom = :nom, salle=:salle, diplome=:diplome where idclasse=:idclasse ;"; 
			$donnees=array(
						":nom"=>$tab['nom'], 
						":salle"=>$tab['salle'],
						":diplome"=>$tab['diplome'],
						":idclasse"=>$tab['idclasse']
						);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}
		public function countClasses () {
			$requete ="select count(*) as nb from classe ;";
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ();
			return $select->fetch();
		}

		/************ Gestion des professeurs **************/
		public function selectAllProfesseurs (){
			$requete ="select * from professeur ; " ;
			$select = $this->unPDO->prepare ($requete); 
			$select->execute (); 
			return $select->fetchAll();  
		}
		public function searchAllProfesseurs ($filtre){
			$requete ="select * from professeur 
					where nom like :filtre or prenom like :filtre or email like :filtre or
						 diplome like :filtre ; " ;
			$donnees=array(":filtre"=> "%".$filtre."%");
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
			return $select->fetchAll();  
		}
		public function insertProfesseur ($tab){
			$requete ="insert into professeur values (null, :nom, :prenom, :email, :diplome);" ;
			$donnees =array(	":nom"=>$tab['nom'], 
								":prenom"=>$tab['prenom'], 
								":email"=>$tab['email'], 
								":diplome"=>$tab['diplome']);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}
		public function deleteProfesseur ($idprofesseur){
			$requete ="delete from professeur where idprofesseur = :idprofesseur ; " ;
			$donnees =array(":idprofesseur"=>$idprofesseur);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}
		public function selectWhereProfesseur($idprofesseur){
			$requete ="select * from professeur where idprofesseur=:idprofesseur;" ; 
			$donnees =array(":idprofesseur"=>$idprofesseur);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
			$unProfesseur = $select->fetch (); 
			return $unProfesseur; 
		}
		public function updateProfesseur ($tab){
			$requete="update professeur set nom = :nom, prenom=:prenom, email = :email, diplome=:diplome where idprofesseur=:idprofesseur ;"; 
			$donnees=array(
						":nom"=>$tab['nom'], 
						":prenom"=>$tab['prenom'],
						":email"=>$tab['email'],
						":diplome"=>$tab['diplome'],
						":idprofesseur"=>$tab['idprofesseur']
						);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}
		public function countProfesseurs () {
			$requete ="select count(*) as nb from professeur ;";
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ();
			return $select->fetch();
		}
		/************ Gestion des Etudiants **************/
		public function selectAllEtudiants (){
			$requete ="select * from etudiant ; " ;
			$select = $this->unPDO->prepare ($requete); 
			$select->execute (); 
			return $select->fetchAll();  
		}
		public function insertEtudiant ($tab){
			$requete ="insert into etudiant values (null, :nom, :prenom, :email, :dateNais, :statut, :idclasse);" ;
			$donnees =array(	":nom"=>$tab['nom'], 
								":prenom"=>$tab['prenom'], 
								":email"=>$tab['email'], 
								":dateNais"=>$tab['dateNais'],
								":statut"=>$tab['statut'],
								":idclasse"=>$tab['idclasse'] 
							);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}
		public function countEtudiants () {
			$requete ="select count(*) as nb from etudiant ;";
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ();
			return $select->fetch();
		}
		/************ Gestion des Enseignements **************/
		public function selectAllEnseignements (){
			$requete ="select * from enseignement ; " ;
			$select = $this->unPDO->prepare ($requete); 
			$select->execute (); 
			return $select->fetchAll();  
		}
		public function insertEnseignement ($tab){
			$requete ="insert into enseignement values (null, :matiere, :nbheures, :coeff, :idclasse, :idprofesseur);" ;
			$donnees =array(	":matiere"=>$tab['matiere'], 
								":nbheures"=>$tab['nbheures'], 
								":coeff"=>$tab['coeff'], 
								":idclasse"=>$tab['idclasse'],
								":idprofesseur"=>$tab['idprofesseur'] 
							);
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ($donnees); 
		}
		public function countEnseignements () {
			$requete ="select count(*) as nb from enseignement ;";
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ();
			return $select->fetch();
		}
	public function verifConnexion ($email, $mdp){
		$requete = "select * from user where email =:email and mdp = :mdp ; "; 
		$select = $this->unPDO->prepare($requete);
		$select->bindValue (":email", $email, PDO::PARAM_STR);
		$select->bindValue (":mdp", $mdp, PDO::PARAM_STR);
		$select->execute (); 
		$unUser = $select->fetch ();
		return $unUser;
	}

	public function selectAllInscriptions (){
			$requete ="select * from inscription ;";
			$select = $this->unPDO->prepare ($requete); 
			$select->execute ();
			return $select->fetchAll();
	}

	}
	
?>








